package com.gree.flowable.app.services;

import com.gree.flowable.app.pojo.model.*;
import com.gree.flowable.app.pojo.vo.FlowNodeVO;
import com.gree.flowable.app.pojo.vo.ReturnVO;
import com.gree.flowable.app.pojo.vo.SolvedTaskVO;
import com.gree.flowable.app.pojo.vo.TaskVO;
import org.flowable.idm.api.User;

import java.util.List;
import java.util.Map;

public interface IFlowableTaskService {

    /**
     * @Title: 查询待办任务列表
     *
     * @return
     */
    PagerModel<TaskVO> getApplyingTasks(QueryApplyMO params, Query query);

    /**
     * @Title: 执行任务
     *
     * @param params 参数
     */
     ReturnVO<String> complete(CompleteTaskMO params);

    /**
     * @Title: 跳转流程
     * @param params        审批基础参数
     * @param targetNodeKey 目标节点元素key(ID)
     * @return
     */
     ReturnVO<String> jumpTask(CompleteTaskMO params, String targetNodeKey);

    /**
     * @Title: 获取我的已办任务
     * @param query
     * @return
     */
    PagerModel<SolvedTaskVO> getApplyedTasks(QueryApplyMO params, Query query);


    /**
     * @Title: 获取审批人
     * @param processInstanceId
     * @return
     */
    List<User> getApprovers(String processInstanceId);

    /**
     * @Title: 获取审批人与节点名称
     * @param processInstanceId
     * @return
     */
    List<Map> getApproversAndTaskNode(String processInstanceId);

    /**
     * @Title: 转办
     * @param turnTaskVo
     * @return
     */
    ReturnVO<String> turnTask(TurnTaskMO turnTaskVo);

    /**
     * @Title: 委派
     * @param delegateTaskVo
     * @return
     */
    ReturnVO<String> delegateTask(DelegateTaskMO delegateTaskVo);

    /**
     * @Title: 签收
     * @param claimTaskVo
     * @return
     */
    ReturnVO<String> claimTask(ClaimTaskMO claimTaskVo);

    /**
     * @Title: 反签收
     * @param claimTaskVo
     * @return
     */
    ReturnVO<String> unClaimTask(ClaimTaskMO claimTaskVo);

    /**
     * @Title: 向前加签
     * @param addSignTaskVo
     * @return
     */
    ReturnVO<String> beforeAddSignTask(AddSignTaskMO addSignTaskVo);

    /**
     * @Title: 向后加签
     * @param addSignTaskVo
     * @return
     */
    ReturnVO<String> afterAddSignTask(AddSignTaskMO addSignTaskVo);

    /**
     * @Title: 加签
     * @param addSignTaskVo
     * @param flag true真 向前加签  false假 向后加签
     * @return
     */
    ReturnVO<String> addSignTask(AddSignTaskMO addSignTaskVo, Boolean flag);

    /**
     * @Title: 获取驳回节点
     * @param processInstanceId
     * @param taskId
     * @return
     */
    List<FlowNodeVO> getBackNodesByProcessInstanceId(String processInstanceId, String taskId);

    /**
     * @Title: 驳回到指定节点
     * @param backTaskVo
     * @return
     */
    ReturnVO<String> backToStepTask(BackTaskMO backTaskVo);

//    /**
//     * @Title: 获取待提交单
//     */
//    PagerModel<TaskVO> getSubmitingTasks(String userCode, Query query);
}
